﻿#ifndef PILEAFFICHAGE_H
#define PILEAFFICHAGE_H

/**
 \file pileaffichage.h
 \brief Pile d'affichage
 \author Baptiste Pirault et  Hugo Dubois
 \date 01/06/2012
 \version 1
 **/
 
#include "exception.h"
#include <QStack>
#include <QTextEdit>
#include <QSettings>

/**
 \class PileAffichage 
 \brief La classe gére l'affichage en stockant les valeurs à afficher 
 Hérite de QStack<QString>
 **/
class PileAffichage : public QStack<QString>
{
public:
	//! \brief Constructeur
	//!
	//! De part l'héritage, Création d'une pile de QString
	//! \param *p : Pointeur sur le QTextEdit qui est la zone de texte ou s'affiche les données
    PileAffichage(QTextEdit* p);
	
	//! \brief Ajoute du texte à l'attrubut text
    //!
	//! Ajoute à text le contenu de nb et de s. Met à jour l'affichage.
	//! \param s : Qstring contenant un caractére à rajouter à txt (un espace ou un opérateur)
	//! \return Retourne une chaine de caractére
    QString addText(const QString s);

    //! \brief Mutateur de nb
    //!
    //! Stocke dans nb le contenu de s. Met à jour l'affichage.
    //! \param s : Qstring contenant un caractére à rajouter à txt
    //! \return Retourne une chaine de caractére
    QString setText(const QString s);

    //! \brief Accesseur de la ligne en cours
    //!
    //! \return Retourne une chaine de caractére
    QString getText();
	
	//! \brief Réinitialise les attributs nb et text
	//!
	//! Change les valeurs de nb et txt avec le caractére vide ""	
	void iniText();
	
	//! \brief Nettoye la pile d'affichage
	//!
	//! Appelle la fonction clear() sur QStack et appelle iniText();	
    void clear();
	
	//! \brief Place le texte contenu dans text dans la pile
	//!
	//! Valeur de text mis dans la pile puis appel de updateAfficheur() pour l'affichage et de iniText() pour remettre les valeurs par défaut
    void pushText();
	
	//! \brief Place t dans la pile par un push
	//!
	//! Rentre t dans la pile et appel de updateAfficheur() pour afficher sur l'interface
	//! \param &t : Référence sur la chaine de caractére à mettre dans la pile
    void push(const QString &t);
	
    //! \brief Sauvegarde la pile dans le fichier mesOptions.ini
    void sauvegarder();
private:

	//! \brief Renvoie tout ce que contient la pile
	//! \return Retourne sous une chaine de caractére tout ce qui est contenu dans la pile
    QString historique() const;
	
	//! \brief Texte de la ligne en cours d'affichage
	//! \return Retourne un QString contenant la ligne 
    QString text;
	
	//! \brief Nombre qui va être affiché
	//! \return Retourne un QString contenant le nombre	
    QString nb; 
	
	//! \brief Pointeur sur l'afficheur de l'interface
    QTextEdit* afficheur;
	
	//! \brief Met à jour l'afficheur de l'interface avec le contenu de la pile
    void updateAfficheur() const;

};

#endif // PILEAFFICHAGE_H
